home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIP Haziran 2001.iso / prog / haziran / 19 / setup.exe / data.z / amcclib.h < prev    next >
C/C++ Source or Header  |  2001-04-11  |  5KB  |  176 lines

  1. #ifndef _AMCCLIB_H_
  2. #define _AMCCLIB_H_
  3.  
  4. #include "../../samples/shared/pci_regs.h"
  5. #include "../../samples/shared/bits.h"
  6.  
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10.  
  11. typedef enum
  12. {
  13.     AMCC_MODE_BYTE   = 0,
  14.     AMCC_MODE_WORD   = 1,
  15.     AMCC_MODE_DWORD  = 2
  16. } AMCC_MODE;
  17.  
  18. typedef enum
  19. {
  20.     AMCC_ADDR_REG      = AD_PCI_BAR0,
  21.     AMCC_ADDR_SPACE0   = AD_PCI_BAR1,
  22.     AMCC_ADDR_SPACE1   = AD_PCI_BAR2,
  23.     AMCC_ADDR_SPACE2   = AD_PCI_BAR3,
  24.     AMCC_ADDR_SPACE3   = AD_PCI_BAR4,
  25.     AMCC_ADDR_NOT_USED = AD_PCI_BAR5
  26. } AMCC_ADDR;
  27.  
  28. typedef struct AMCC_STRUCT *AMCCHANDLE;
  29.  
  30. typedef struct
  31. {
  32.     DWORD dwCounter;   // number of interrupts received
  33.     DWORD dwLost;      // number of interrupts not yet dealt with
  34.     BOOL fStopped;     // was interrupt disabled during wait
  35.     DWORD dwStatusReg; // value of status register when interrupt occured
  36. } AMCC_INT_RESULT;
  37. typedef void (WINAPI *AMCC_INT_HANDLER)( AMCCHANDLE hAmcc, AMCC_INT_RESULT *intResult);
  38.  
  39. typedef struct
  40. {
  41.     WD_INTERRUPT Int;
  42.     HANDLE hThread;
  43.     WD_TRANSFER Trans[2];
  44.     AMCC_INT_HANDLER funcIntHandler;
  45. } AMCC_INTERRUPT;
  46.  
  47. typedef struct
  48. {
  49.     DWORD dwLocalBase;
  50.     DWORD dwMask;
  51.     DWORD dwBytes;
  52.     DWORD dwAddr;
  53.     DWORD dwAddrDirect;
  54.     BOOL  fIsMemory;
  55. } AMCC_ADDR_DESC;
  56.  
  57. typedef struct AMCC_STRUCT
  58. {
  59.     HANDLE hWD;
  60.     WD_CARD cardLock;
  61.     WD_PCI_SLOT pciSlot;
  62.     WD_CARD_REGISTER cardReg;
  63.     AMCC_ADDR_DESC addrDesc[AD_PCI_BARS];
  64.     BOOL   fUseInt;
  65.     AMCC_INTERRUPT Int;
  66. } AMCC_STRUCT;
  67.  
  68. // options for AMCC_Open
  69. enum { AMCC_OPEN_USE_INT =   0x1 };
  70.  
  71. DWORD AMCC_CountCards (DWORD dwVendorID, DWORD dwDeviceID);
  72. BOOL AMCC_Open (AMCCHANDLE *phAmcc, DWORD dwVendorID, DWORD dwDeviceID, DWORD nCardNum, DWORD dwOptions);
  73. void AMCC_Close (AMCCHANDLE hAmcc);
  74.  
  75. BOOL AMCC_IsAddrSpaceActive(AMCCHANDLE hAmcc, AMCC_ADDR addrSpace);
  76.  
  77. void AMCC_WriteRegDWord (AMCCHANDLE hAmcc, DWORD dwReg, DWORD data);
  78. DWORD AMCC_ReadRegDWord (AMCCHANDLE hAmcc, DWORD dwReg);
  79. void AMCC_WriteRegWord (AMCCHANDLE hAmcc, DWORD dwReg, WORD data);
  80. WORD AMCC_ReadRegWord (AMCCHANDLE hAmcc, DWORD dwReg);
  81. void AMCC_WriteRegByte (AMCCHANDLE hAmcc, DWORD dwReg, BYTE data);
  82. BYTE AMCC_ReadRegByte (AMCCHANDLE hAmcc, DWORD dwReg);
  83.  
  84. void AMCC_WriteDWord(AMCCHANDLE hAmcc, AMCC_ADDR addrSpace, DWORD dwLocalAddr, DWORD data);
  85. DWORD AMCC_ReadDWord(AMCCHANDLE hAmcc, AMCC_ADDR addrSpace, DWORD dwLocalAddr);
  86. void AMCC_WriteWord(AMCCHANDLE hAmcc, AMCC_ADDR addrSpace, DWORD dwLocalAddr, WORD data);
  87. WORD AMCC_ReadWord(AMCCHANDLE hAmcc, AMCC_ADDR addrSpace, DWORD dwLocalAddr);
  88. void AMCC_WriteByte(AMCCHANDLE hAmcc, AMCC_ADDR addrSpace, DWORD dwLocalAddr, BYTE data);
  89. BYTE AMCC_ReadByte(AMCCHANDLE hAmcc, AMCC_ADDR addrSpace, DWORD dwLocalAddr);
  90.  
  91. void AMCC_ReadWriteSpaceBlock (AMCCHANDLE hAmcc, DWORD dwOffset, PVOID buf, DWORD dwBytes, BOOL fIsRead, AMCC_ADDR addrSpace, AMCC_MODE mode);
  92. void AMCC_ReadSpaceBlock (AMCCHANDLE hAmcc, DWORD dwOffset, PVOID buf, DWORD dwBytes, AMCC_ADDR addrSpace);
  93. void AMCC_WriteSpaceBlock (AMCCHANDLE hAmcc, DWORD dwOffset, PVOID buf, DWORD dwBytes, AMCC_ADDR addrSpace);
  94.  
  95. BOOL AMCC_ReadNVByte(AMCCHANDLE hAmcc, DWORD dwAddr, BYTE *pbData);
  96.  
  97. // interrupt functions
  98. BOOL AMCC_IntIsEnabled (AMCCHANDLE hAmcc);
  99. BOOL AMCC_IntEnable (AMCCHANDLE hAmcc, AMCC_INT_HANDLER funcIntHandler);
  100. void AMCC_IntDisable (AMCCHANDLE hAmcc);
  101.  
  102. // access pci configuration registers
  103. DWORD AMCC_ReadPCIReg(AMCCHANDLE hAmcc, DWORD dwReg);
  104. void AMCC_WritePCIReg(AMCCHANDLE hAmcc, DWORD dwReg, DWORD dwData);
  105.  
  106. // DMA functions
  107. BOOL AMCC_DMAOpen(AMCCHANDLE hAmcc, WD_DMA *pDMA, DWORD dwBytes);
  108. void AMCC_DMAClose(AMCCHANDLE hAmcc, WD_DMA *pDMA);
  109. BOOL AMCC_DMAStart(AMCCHANDLE hAmcc, WD_DMA *pDMA, BOOL fRead,
  110.     BOOL fBlocking, DWORD dwBytes, DWORD dwOffset);
  111. BOOL AMCC_DMAIsDone(AMCCHANDLE hAmcc, BOOL fRead);
  112.  
  113. // this string is set to an error message, if one occurs
  114. extern CHAR AMCC_ErrorString[];
  115.  
  116. // Operation register offsets
  117. enum
  118. {
  119.     OMB1_ADDR   = 0x00,
  120.     OMB2_ADDR   = 0x04,
  121.     OMB3_ADDR   = 0x08,
  122.     OMB4_ADDR   = 0x0c,
  123.     IMB1_ADDR   = 0x10,
  124.     IMB2_ADDR   = 0x14,
  125.     IMB3_ADDR   = 0x18,
  126.     IMB4_ADDR   = 0x1c,
  127.     FIFO_ADDR   = 0x20,
  128.     MWAR_ADDR   = 0x24,
  129.     MWTC_ADDR   = 0x28,
  130.     MRAR_ADDR   = 0x2c,
  131.     MRTC_ADDR   = 0x30,
  132.     MBEF_ADDR   = 0x34,
  133.     INTCSR_ADDR = 0x38,
  134.     BMCSR_ADDR  = 0x3c
  135. };
  136.  
  137. enum { 
  138.     BMCSR_NVDATA_ADDR = BMCSR_ADDR + 2,
  139.     BMCSR_NVCMD_ADDR = BMCSR_ADDR + 3
  140. };
  141. enum { NVRAM_BUSY_BITS        = BIT7 };    /* Bit 31 indicates if device busy */
  142.  
  143. enum { 
  144.     NVCMD_LOAD_LOW_BITS    = BIT7,              /* nvRAM Load Low command */
  145.     NVCMD_LOAD_HIGH_BITS   = BIT5 | BIT7,       /* nvRAM Load High command */
  146.     NVCMD_BEGIN_WRITE_BITS = BIT6 | BIT7,       /* nvRAM Begin Write command */
  147.     NVCMD_BEGIN_READ_BITS  = BIT5 | BIT6 | BIT7 /* nvRAM Begin Read command */
  148. };
  149. enum { AMCC_NVRAM_SIZE = 0x80 }; // size in bytes of nvRAM
  150.  
  151. enum
  152. {
  153.     AIMB1    = 0x00,
  154.     AIMB2    = 0x04,
  155.     AIMB3    = 0x08,
  156.     AIMB4    = 0x0c,
  157.     AOMB1    = 0x10,
  158.     AOMB2    = 0x14,
  159.     AOMB3    = 0x18,
  160.     AOMB4    = 0x1c,
  161.     AFIFO    = 0x20,
  162.     AMWAR    = 0x24,
  163.     APTA     = 0x28,
  164.     APTD     = 0x2c,
  165.     AMRAR    = 0x30,
  166.     AMBEF    = 0x34,
  167.     AINT     = 0x38,
  168.     AGCSTS   = 0x3c,
  169. };
  170.  
  171. #ifdef __cplusplus
  172. }
  173. #endif
  174.  
  175. #endif
  176.